Data storage systems are arrangements of hardware and software that include one or more storage processors coupled to arrays of non-volatile storage devices, such as magnetic disk drives, electronic flash drives, and/or optical drives, for example. The storage processors service storage requests, arriving from host machines (“hosts”), which specify files or other data elements to be written, read, created, or deleted, for example. Software running on the storage processors manages incoming storage requests and performs various data processing tasks to organize and secure the data elements stored on the non-volatile storage devices.
Data storage systems often use non-disruptive migration to move data objects hosted from one set of storage elements to another without removing the data objects from service. For example, an administrator may wish to migrate an actively accessed LUN (Logical Unit Number, referring to a logical disk) from an older or slower set of disk drives to a newer or faster set of disk drives. Migration may also be used for load balancing and/or for deploying new features incompatible with existing settings, such as deduplication, for example.
One prior technique for performing non-disruptive migration of a source LUN to a target LUN performs a background copy in parallel with servicing IO (Input/Output) requests directed to the source LUN. The background copy proceeds in an ordered fashion through the source LUN, e.g., starting from a beginning offset of the source LUN and proceeding to an ending offset. A marker indicates a current offset to which the background copy has progressed. If an IO request arrives specifying data to be written to a location in the source LUN that is greater than the current marker location, the specified data is written only to the source LUN. However, if an IO request specifies data to be written to a location less than the current marker location, the specified data is written to both the source LUN and the target LUN. In this manner, the source LUN and the target LUN become synchronized. Once copying is complete, the source LUN may be taken offline, with service proceeding henceforth from the target LUN.